#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

// 使用malloc函数创建一个二维数组
// 有两种创建的方法
// 还是要了解完才行

int main ()
{

    int row = 3 , col = 5 ;

    // 第一种,创建一个二级数组指针变量,然后再通过循环给二级数组指针的每一元素再开辟空间

    int** a = (int **) malloc (sizeof(int*) * 5) ; // 这里的类型转换还不需要考虑结合性,但是方法二要考虑

    for (int i = 0; i < 5; i++) 
    {

        a [i] = (int *) malloc (sizeof (int) * 4) ;

    }

    // 方法二,使用一级数组指针变量,然后再开辟一大块空间分给每个数组元素使用

    int (*p) [col] =  (int (*) [col]) malloc (sizeof (int) * row * col) ; // 这里要注意结合性了,因为这里要给数组指针开辟空间,所以*的结合需要用括号括起来不然就会乱结合
    // 而且开辟的空间要一大块,不能是根据每块元素单独开辟

    for (int j = 0 ; j < row ; j++)
    {

        for (int k = 0 ; k < col ; k++)
        {

            printf ("%d " , p [j] [k]) ;

        }

        printf ("\n") ;

    }

    free (a) ;

    a = NULL ;

    free (p) ;

    p = NULL ;

    return 0 ;

}